package com.example.event_resource_java.authority.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.event_resource_java.authority.dao.CourseClassDao.StuClassDO;
import com.example.event_resource_java.authority.dao.CourseClassDao.StudentClassesDO;
import com.example.event_resource_java.commons.domain.UserDO;
import com.example.event_resource_java.commons.vo.ClassesVO;
import com.example.event_resource_java.commons.vo.ClassVO.StudentVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface ClassMapper extends BaseMapper<StudentClassesDO> {
    /**
     * 根据用户id 获取用户信息
     */
    public UserDO getSysUserByUserId(Long userId);

    /**
     * 根据用户名（唯一）获取用户信息
     */
    public UserDO getSysUserByUsername(String username);

    /**
     * 判断是否有重复学生加入班级 （前端已做）
     */
    public Long deDuplication(Long classId, Long userId);

    /**
     */
    public UserDO verifyClass(String username);

    /**
     * 根据id获取班级
     */
    public String getClassById(Long id);

    /**
     * 根据创建者获取班级
     */
    public List<Long> getClassByCreaterId(Long createrId);

    /**
     * 批量保存班级信息
     */
    public boolean batchSaveStuClass(List<StuClassDO> stuClassesDOList);

    /**
     * 获取学生信息
     */
    public List<StudentVO> getStudentInfo(String name, String mobile, Long classId);

    /**
     * 获取创建者管理的班级
     */
    public List<ClassesVO> getClasses(String className, Long createrId);

    /**
     * 获取班级学生数
     */
    Integer getStuNum(Long classId);

    List<StuClassDO> getClassStu(Long classId);

    /**
     * 退出班级
     */
    public boolean quitStu(Long userId, Long classId);

    /**
     * 更新班级名称
     */
    public boolean updateClass(Long classId, String className, Long updateId, String updateTime);

    /**
     * 更新学生信息
     */
    public boolean updateStu(String name, String mobile, Integer sex, String password, Long userId, String updateTime);

    /**
     * 新增班级
     *
     * @param stuClassDO
     * @return
     */
    public boolean addClass(@Param("s") StuClassDO stuClassDO);

    /**
     * 批量保存用户信息
     *
     * @param userDOList
     * @return
     */
    boolean batchSaveStudent(List<UserDO> userDOList);

    /**
     * 保存用户信息
     *
     * @param userDO
     * @return
     */
    Long saveUser(@Param("user") UserDO userDO);

    /**
     * 老师根据班级名 获取管理的班级id
     *
     * @param classname
     * @param createrId
     * @return
     */
    Long getClassId(String classname, Long createrId);

    /**
     * 获取所有用户名
     *
     * @return
     */
    List<String> getAllUsername();

    /**
     * 获取插入的用户id
     *
     * @param userDO
     * @return
     */
    Long getInsertUserId(@Param("user") UserDO userDO);

    /**
     * 判断班级是否存在
     *
     * @param classname
     * @param createrId
     * @return
     */
    Long isExistClass(String classname, Long createrId);

    /**
     * 获取班级列表
     *
     * @param createrId
     * @return
     */
    List<String> classList(Long createrId);

    List<StuClassDO> getStuClass();

    List<StuClassDO> getStuClassById(Long classId);
    /**
     * 获取用户所在班级id
     *
     * @param userId
     * @return
     */
    StuClassDO getUserClassId(Long userId);

    /**
     * 逻辑删除班级
     * @param classId
     * @return
     */
    boolean deleteClass(Long classId);

    /**
     * 恢复删除班级
     * @param classId
     * @return
     */
    boolean reCreateClass(Long classId, String createTime);

    Integer isExistsStudent(Long userId);
}
